package com.czk.stream;

import java.util.Arrays;
import java.util.List;

/**
 * @author chenzhangkun
 * @ClassName Reduce_Demo
 * @description: TODO
 * @date 2025年01月23日
 */
public class Reduce_Demo {
	public static void main(String[] args) {

		List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
		// 求和
		Integer sum = numbers.stream().reduce(0, Integer::sum);
		System.out.println(sum);
		// 最大值
		Integer max = numbers.stream().reduce(0, Integer::max);
		System.out.println(max);
		// 积
		Integer product = numbers.stream().reduce(1, (a, b) -> a * b);
		System.out.println(product);
		// 使用并行流和 combiner
		int parallelSum = numbers.parallelStream()
				.reduce(0,
						Integer::sum, // 累加器
						Integer::sum  // 组合器
				);
		System.out.println(parallelSum);
		// 使用 reduce 统计总长度
		List<String> words = Arrays.asList("apple", "banana", "cherry");
		int totalLength = words.stream()
				.reduce(0,
						(length, word) -> length + word.length(),
						Integer::sum);

		System.out.println("Total length: " + totalLength); // 输出 17


	}
}
